<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // 2. 日历
    // (1)  封装一个函数 => 传入一个日期对象,返回该月的第一天时星期几?  
    // (2)  封装一个函数 => 传入一个日期对象,返回上个月有多少天?  
    // (3)  封装一个函数 => 传入一个日期对象,返回本月有多少天?
    
    // 不影响原日期对象(日期对象 => 对象 => 引用类型)  

    // 本月的第0天 就是上个月的最后一天
    // 下个月第0天 就是本月的最后一天

    // var date = new Date();
    // date.setDate(1); // 设置为该月的第一天
    // var week = date.getDay();
    // console.log(week);

    /* function getFirstDayWeek(date){
        date = new Date(date);  //得到一个与原日期时间相同的新日期
        date.setDate(1); // 设置为该月的第一天
        var week = date.getDay();
        return week;
    }

    var date = new Date();
    var result = getFirstDayWeek(date);
    console.log(result);
    console.log(date);
 */
    // ---------------------------------------------------------------

    // 传入一个日期对象,返回上个月有多少天?  
    // var date = new Date();
    // date.setDate(0); //本月的第0天 就是上个月的最后一天
    // var day = date.getDate();
    // console.log(day);

    /* function getLastMonthDays(date){
        date = new Date(date);
        date.setDate(0); //本月的第0天 就是上个月的最后一天
        return date.getDate();
    }

    var date = new Date();
    var result = getLastMonthDays(date);
    console.log(result);
    console.log(date); */


    // 传入一个日期对象,返回当前月有多少天?    =>下个月的第0天就是本月的最后一天
    // var date = new Date();
    // date.setMonth(date.getMonth()+1);  // var month = date.getMonth(); date.setMonth(month+1)
    // date.setDate(0); //下个月的第0天 就是本月的最后一天
    // var day = date.getDate();
    // console.log(day);


    function getThisMonthDays(date){
        // debugger;
        date = new Date(date);

        // 月份切换 => (31号)日期可能自动换算
        // 问题:  date.setMonth(date.getMonth()+1);   只是将月份向后推一个月 但是没有考虑日期 =>如果月份切换的过程中  日期超出最大临界值(31 => 30    31 =>28 29 大月=>小月,二月)
        // 问题演示
        // 原日期: 2021-10-31  => 下个月 2021-11-13 => 超出换算(2021-12-1) => 设置日期为0 (2021-11-30)

        // 解决方法:经分析 日期是几号(31除外)没有太大的影响  => 后面都会被设置为0 => 可以在改变月份之前将日期设置为 每个月都有的(1-28) 
        // 问题解决效果演示
        // 原日期: 2021-10-31  => 设置为1号(2021-10-1) =>下个月 2021-11-1 => 设置日期为0 (2021-11-0 => 2021-10-31)


        date.setDate(1);
        date.setMonth(date.getMonth()+1);  
        date.setDate(0); //下个月的第0天 就是本月的最后一天
        return date.getDate();
    }

    var date = new Date("2021-10-31");
    var result = getThisMonthDays(date);
    console.log(result);
    console.log(date);
    







</script>
</html>